#define  _CRT_SECURE_NO_WARNINGS

#include <iostream>
using namespace std;

//class Date
//{
//public:
//	Date* operator&()
//	{
//		return this;
//	}
//
//	const Date* operator&() const
//	{
//		return this;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	Date d1;
//	cout << &d1 << endl;
//
//	return 0;
//}

//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//		_year = 10;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};

//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};

//class A
//{
//public:
//	A(int m, int n)
//	{
//		_b = m;
//	}
//
//private:
//	int _b;
//};
//
//class Date
//{
//public:
//	Date(int year, int month, int day, int& x)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//		,_p((int*)malloc(4))
//		,_n(1)
//		,_a(x)
//		,_i(1,2)
//	{
//		if (_p == nullptr)
//		{
//			perror("malloc fail");
//			exit(-1);
//		}
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//	int* _p;
//
//	const int _n;
//	int& _a;
//	A _i;
//};

//class Date
//{
//public:
//	Date(int year = 10, int month = 10, int day = 10)
//		: _month(month)
//		, _day(day)
//	{}
//
//private:
//	int _year = 1;// ȱʡֵ
//	int _month = 1;
//	int _day = 1;
//};

//class B
//{
//public:
//	B(int x  = 1)
//		:_b(x)
//	{}
//
//private:
//	int _b;
//};
//
//class A
//{
//public:
//	A(int x = 0)
//		:_a(x)
//	{}
//
//private:
//	int _a;
//	//B _b = _bb;
//	B _b = 3;
//};
//
//class Stack
//{
//public:
//	void Push(const A& st)
//	{}
//};
//
//int main()
//{
//	//A a1(1);
//	//A a2 = 2;
//
//	Stack st;
//	A a(1);
//	st.Push(a);
//
//	st.Push(2);
//
//	A a1 = 1;
//	const A& a2 = 2;
//
//	int x = 2;
//	const int& y = 3;
//
//	return 0;
//}

//class A
//{
//public:
//	A(int x, int y)
//		:_a1(x)
//		,_a2(y)
//	{}
//
//private:
//	int _a1;
//	int _a2;
//};
//
//int main()
//{
//	A a1 = { 1,2 };
//
//	return 0;
//}

//class A
//{
//public:
//	A(int a)
//		:_a1(a)
//		,_a2(_a1)
//	{}
//
//	void Print()
//	{
//		cout << _a1 << " " << _a2 << endl;
//	}
//
//private:
//	int _a2;
//	int _a1;
//};
//
//int main()
//{
//	A d1(1);
//	d1.Print();
//
//	return 0;
//}

//class A
//{
//public:
//	A()
//	{
//		n++;
//	}
//
//	A(const A& d)
//	{
//		n++;
//	}
//
//private:
//	int _a;
//	static int n;
//};

//class A
//{
//public:
//	A()
//	{n++;}
//
//	A(const A& d)
//	{n++;}
//
////private:
//	int _a;
//    static int n;
//};

class A
{
public:
	A()
	{
		n++;
	}

	A(const A& d)
	{
		n++;
	}

	static int GetN()
	{
		return n;
	}

private:
	int _a;
	static int n;
};

int A::n = 0;

A Func()
{
	A a;
	return a;
}

int main()
{
	A a1;
	A a2;
	Func();

	//cout << A::n << endl;
	//cout << a1.n << endl;
	//cout << a2.n << endl;

	cout << A::GetN() << endl;

	return 0;
}